EC2のイメージ作成を劇的に効率化するEC2 Image Builderが発表されました! #reinvent
EC2のイメージ作成を自動化するEC2 Image Builderが発表されました!
「イメージの定期更新、いつも俺がやってるねんけど、これめんどくさい…」
何らかのカスタムしたEC2イメージを利用してシステムを運用している場合、そのイメージのメンテナンスは非常に手間がかかるものです。イメージにはいろんなアプリケーションが含まれますが、それらの更新をせずに放置したイメージを使い続けると、システム全体のセキュリティリスクが増大してしまいます。
そんな手間を一気に解決させるサービスが、今般、AWSからリリースされたEC2 Image Builderです。
Automate OS Image Build Pipelines with EC2 Image Builder | AWS News Blog
今まで手動で実行したり、Packerなどのサードパーティ製ツールを使って実装する必要があったイメージ更新の自動化〜テストが、このサービス一つで全部広範囲に対応することができます。
全リージョンですぐに使えるサービスなので、まずはこの記事を見ながら簡単なレシピを作成し、この機能の素晴らしさを体感してみてください。
(祭) ∧ ∧ Y ( ゚Д゚) Φ[_ソ__y_l〉 イメージマツリダワッショイ |_|_| し'´J
EC2 Image Builderとは?
ドキュメントはこちら。
詳細なユーザーガイドはこちらになります。
What Is Amazon Elastic Compute Cloud Image Builder? - Amazon Elastic Compute Cloud Image Builder
AWS上でアプリケーションを運用している場合、利用するEC2のイメージの最新化は非常に手間がかかるものでした。仮想マシンを手動で更新し都度手動でスナップショットを取得したり、自動化スクリプトを作成して動かしたり。これは、開発チームにとって大きな負荷でした。
このたびリリースされた、EC2 Image Builderが発表されたことで、Amazon Linux2やWindows Serverのイメージ作成をより簡単かつ迅速に保守、運用できるようになります。
HashiCorpのPackerでイメージの作成を自動化していた現場では、その代替になりうるマネージドサービスと言えます。
どのように動作するのか?
(公式マニュアルからの引用:https://aws.amazon.com/jp/image-builder/)
最初に元となるイメージを指定しておき、それを元にEC2 Image Builderののパイプラインを起動します。動作順序の概要は以下の通り。
- 元となるイメージを指定
- イメージに対してAWSマネージド、もしくはカスタマイズソフトウェアをインストール
- 作成したイメージに対してAWSマネージドの、もしくはカスタマイズしたテストを実行
- テストが問題なければ、作成したイメージを「ゴールデンイメージ」として展開
サポート対象のOS
2019年12月2日時点で、対応しているOSは以下の通り。
- Amazon Linux 2
- Windows Server 2019/2016/2012 R2
ソースとなるイメージのフォーマット
2019年12月2日時点で、対応しているソースイメージのフォーマットは以下の通り。
- An existing AWS AMI
- An EBS snapshot
Image Builderにかかる料金
Image Builder自体(パイプラインなど)には料金はかかりません。下記関連サービスには、従来どおりそれぞれのサービスの料金がかかります。
- S3へのログ保存
- イメージのバリデーションで利用するAmazon Inspector
- AMIで利用するストレージ(EBS)
実際にImage Builderを使ってパイプラインを作ってみた
ざっとドキュメントを眺めてみましたが、できる機能は非常に多いため、まずは手を動かして何ができるかを試してみます。
イメージビルダーのWebコンソールにアクセスします。
「Create image pipeline」をクリック。
レシピの定義
「Define recipe」画面に遷移します。最初に作成するイメージの種類と元になるイメージを設定します。ここは一度作成すると修正できません。
ここでは、Amazon Linux2を選択し、「Select managed images」をクリック。その下のイメージ選択画面で、「Brows Images」ボタンを押すとイメージ選択画面が出てきます。イメージは下記3種類からフィルタリング可能。
- 「自分で作成したイメージ」
- 「自分で共有したイメージ」
- 「AWSが公開しているイメージ」
ここでは、Amazon Linux2 x86
を選択。また「Initiate a new image build when there are updates to your selected image version.」にチェクをつけます。
ビルドコンポーネントの選択および作成
次に、このベースイメージに導入するビルドコンポーネントを選択します。このビルドコンポーネント自分で作成もできますが、あらかじめAWSで用意されているものがあるので、それを今回は利用します。
「Browse build Components」をクリックすると、このイメージに導入するコンポーネントとして既に用意されているものが一覧で表示されます。
適当に導入したいコンポーネントをクリックしていきます。こんな感じで、amazon-correttoやphpやpythonを選択してみました。
テストの定義
最後に、イメージをテストするためのコンポーネントを選択します。
「Browse tests」ボタンをクリックすると、テストコンポーネントの一覧が表示されます。
ここから、イメージでテストさせたいコンポーネントを選択し、元の画面に戻ります。
パイプライン詳細の設定
パイプラインの名前と説明、パイプラインで利用するIAMロール、ビルドのスケジュールを設定します。
次の画面の「Configure additional settings」は、OutputAMIにtest-imagebuilder-output-ami
だけ設定し、最後に設定内容を確認後、パイプラインを作成します。
元の画面に戻ると、無事イメージビルドのパイプラインが作成されました!
パイプラインを実際に実行してみる
早速、作成したパイプラインを実行してみます。チェックボックスで対象のパイプラインを選択後、「Action」ドロップダウンから、「Run pipeline」をクリック。
しばらくすると、パイプラインの実行詳細画面に遷移します。
最初はStatusがBuilding
の状態ですが、しばらくするとStatusがEnabled
になり、Output imagesに作成されたAMIが表示されています!いやっほぅ!
EC2のAMIメニューを見ると、確かに作成されたAMIが表示されていました。
イメージ作成の超強力な手段となる新機能
EC2 Auto Scaligや、ECSやEKSなどの運用、その他アプリケーション開発〜運用のベースとするイメージの更新、特に含まれている各コンポーネントのバージョンアップ、およびそれに伴うテストは、システムのセキュリティリスクを抑えるために非常に重要です。ですが、その運用を自動化するのは難しく、手作業でするには手間がかかるものでした。
今回このEC2 Image Builderのリリースで、そのあたりがまるっと全てAWSのマネージド・サービスとして提供されることで、そのあたりのイメージ作成の自動化の手間が一気に解消される可能性があります。
イメージに導入するコンポーネントも独自で作成可能ですし、イメージ作成後のテストも自前で実装可能です。独自のアプリケーションの導入や、アプリケーションレイヤーでのテストも含めて自動化し最新のイメージを常に作成することで、日々のシステム運用やセキュリティの脅威が一気に改善されるかもしれません。
現在、イメージの更新が手間だなぁと思っているすべての人が使うべきサービスです。まずは、一度触ってみてはいかがでしょうか。
それでは、今日はこのへんで。濱田(@hamako9999)でした。
関連記事
Developers.IOでも、Image Builderについての記事が続々上がっています。ぜひこちらもご参考ください。
- [re:Invent 2019] EC2イメージビルダーをサクッと試してみた #reinvent | Developers.IO
- EC2 Image Builderで作ったイメージを他アカウントに共有してみた #reinvent | Developers.IO
- [re:Invent 2019] EC2イメージビルダーを使って複数リージョンにAMIを作成してみた #reinvent | Developers.IO
- [re:Invent 2019] EC2 Image Builder で S3 からコンテンツをデプロイしてみた #reinvent | Developers.IO
- [re:Invent 2019] EC2 Image Builder でコンポーネントを作成してみた #reinvent | Developers.IO
- [re:Invent 2019] EC2 Image Builder で複数コンポーネントを実行してみた #reinvent | Developers.IO
- [re:Invent 2019] EC2 Image Builder のパイプラインを AWS CLI で実行してみた #reinvent | Developers.IO